# Author:  wuxianfeng
# Company: songqin
# File:    comm_driver.py
# Date:    22-9-21
# Time:    下午 8:32
from config.env import Env

print()
'''
知识点:

'''
from selenium import webdriver



class Singleton1(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            # 不能用__instance，伪私有元素无该属性
            # 判断类是否具有_instance属性，如果没有就new一个类出来
            cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
        return cls._instance  # 不管有没有该属性，都是new过的类，就返回new出来的类


class Singleton2(object):
    _instance = None  # 定义一个类属性

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:  # 如果为None，意即没有new过（执行下面的），就执行一次
            cls._instance = super(Singleton2, cls).__new__(cls, *args, **kwargs)
        return cls._instance  # 不管是第一次还是第二次，都返回new出来的类


class CommDriver(Singleton1):
    """
    通用的浏览器类
        - 打开浏览器
            - 最大化
            - 浏览器的类型
            - 有头和无头的设置
        - 关闭浏览器
    """
    driver = None


    # if mode == 0:
    #     log.info('远程docker容器启动')
    #     driver = selenium.webdriver.remote.webdriver.WebDriver(
    #         command_executor="http://166.166.200.50:5001/wd/hub",
    #         desired_capabilities=DesiredCapabilities.CHROME
    #     )
    # elif mode == 1:
    #     log.info('启动本地浏览器')
    #     driver = webdriver.Chrome()


    def get_driver(self,browser_type=Env.BROWSER_TYPE,headless_flag=Env.HEADLESS_FLAG):
        """
        根据env的配置 获取一个浏览器，最大化并设置页面超时时间
        Args:
            browser_type:  浏览器类型
            headless_flag: 有头无头的标记，False表示有头，True表示无头
        Returns: 浏览器
        """
        if self.driver is None:  # 参考单例的第二种实现；结合下面的test_flag 123
            if not headless_flag:  # 如果是有头
                if browser_type == 'firefox':  # 判断浏览器类型 打开对应的浏览器
                    self.driver = webdriver.Firefox()
                elif browser_type == 'chrome':
                    self.driver = webdriver.Chrome()

            else:
                if browser_type == 'firefox':
                    option = webdriver.FirefoxOptions()
                    option.add_argument('--headless')
                    self.driver = webdriver.Firefox(options=option)
                elif browser_type == 'chrome':
                    option = webdriver.ChromeOptions()
                    option.add_argument('--headless')
                    self.driver = webdriver.Chrome(options=option)

            self.driver.maximize_window()
            self.driver.set_page_load_timeout(Env.PAGE_LOAD_TIMEOUT)  # 加载页面的最大超时时间
        return self.driver



if __name__ == '__main__':
    test_flag = 3
    if test_flag == 3:
        d3 = CommDriver()
        d4 = CommDriver()
        print(id(d3) == id(d4))  # True  # 问题出在 get_driver()
    if test_flag == 2:
        class A(Singleton1):
            pass


        a1 = A()
        a2 = A()
        print(id(a1) == id(a2))  # True
    if test_flag == 1:  # 加了         if self.driver is None:再次运行
        d1 = CommDriver().get_driver()
        d2 = CommDriver().get_driver()
        print(id(d1) == id(d2))  # False  # 第二次运行 True
